'use strict'
const path = require('path')
const defaultSettings = require('./src/settings.js')

const pkg = require('./package.json')

const CopyWebpackPlugin = require('copy-webpack-plugin')
// const CompressionPlugin = require('compression-webpack-plugin')
const webpack = require('webpack')
const AddAssetHtmlPlugin = require('add-asset-html-webpack-plugin')
function resolve(dir) {
  return path.join(__dirname, dir)
}

const name = defaultSettings.title || 'vue Admin Template' // page title

const port = process.env.port || process.env.npm_config_port || 9528 // dev port
const parallel = process.env.NODE_ENV === 'development'
const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
module.exports = {
  productionSourceMap: true,
  publicPath: '/mct',
  parallel,
  // 使用mock-server
  devServer: {
    port: port,
    host: '0.0.0.0',
    proxy: {
      // '^(?!/login)': {
      //   target: 'http://192.168.2.17:8082/',
      //   ws: true,
      //   changeOrigin: false,
      // },
      '/link': {
        target: process.env.VUE_APP_BASE_API,
        ws: true,
        changeOrigin: false,
      },
      '/websocket': {
        target: process.env.VUE_APP_BASE_API,
        ws: true,
        changeOrigin: false,
      },
      '/mctapi': {
        target: 'https://hyida.cosmoplat.com/',
        // ws: true,
        changeOrigin: true,
        // pathRewrite: {
        //   ["^/mctapi"]: "",
        // }
      },
    },
    open: true,
    overlay: {
      warnings: false,
      errors: true,
    },
    headers: {
      // "Access-Control-Allow-Credentials": true,
      "Access-Control-Allow-Origin": "*",
      // "Access-Control-Allow-Headers": "X-Requested-With,Content-Type",
      // "Access-Control-Allow-Methods": "PUT,POST,GET,DELETE,OPTIONS",
      // "Content-Type": "application/json; charset=utf-8",
    },
  },

  pages: {
    index: {
      entry: 'src/main.js',
      template: 'public/index.html',
      filename: 'index.html',
    },
  },
  configureWebpack: {
    name: name,
    devtool: 'source-map',
    resolve: {
      alias: {
        '@': resolve('src'),
      },
    },
    output:
      process.env.NODE_ENV === 'development'
        ? {
          library: `${name}-[name]`,
          libraryTarget: 'umd', // 把微应用打包成 umd 库格式
          jsonpFunction: `webpackJsonp_${name}`,
        }
        : {
          filename: `js/[name].[contenthash:8].${pkg.version}.js`,
          chunkFilename: `js/[name].[contenthash:8].${pkg.version}.js`,
          library: `${name}-[name]`,
          libraryTarget: 'umd', // 把微应用打包成 umd 库格式
          jsonpFunction: `webpackJsonp_${name}`,
        },
    plugins: [
      new CopyWebpackPlugin([
        {
          from: path.join(__dirname, 'static'),
          to: path.join(__dirname, 'dist/static'),
        },
      ]),
      new webpack.DllReferencePlugin({
        context: process.cwd(),
        manifest: require('./public/vendor/vendor-manifest.json'),
      }),
      // // 将 dll 注入到 生成的 html 模板中
      new AddAssetHtmlPlugin({
        // dll文件位置
        filepath: path.resolve(__dirname, './public/vendor/*.js'),
        // dll 引用路径
        publicPath: '/mct/vendor',
        // dll最终输出的目录
        outputPath: './vendor',
      }),
    ],
    optimization: {
      minimizer: [new UglifyJsPlugin({
        uglifyOptions: {
          compress: {
              drop_debugger: true,
              drop_console: true,  //生产环境自动删除console
          },
          warnings: false,
        },
        sourceMap: false,
        parallel: true,//使用多进程并行运行来提高构建速度。默认并发运行数：os.cpus().length - 1。
      })],
    },
  },
  chainWebpack: (config) => {
    config.module.rules.delete('svg') // 删除默认配置中处理svg,
    // const svgRule = config.module.rule('svg')
    // svgRule.uses.clear()
    config.module
      .rule('svg-sprite-loader')
      .test(/\.svg$/)
      .include.add(resolve('src/icons')) // 处理svg目录
      .end()
      .use('svg-sprite-loader')
      .loader('svg-sprite-loader')
      .options({
        symbolId: 'icon-[name]',
      })
    if (process.env.NODE_ENV === 'production') {
      /* config.plugin('compressionPlugin').use(new CompressionPlugin({
        test: /\.(js|css|less)$/, // 匹配文件名
        threshold: 10240, // 对超过10k的数据压缩
        minRatio: 0.8,
        deleteOriginalAssets: true // 删除源文件
      })) */
    }

    config.module
      .rule('icons')
      .test(/\.svg$/)
      .include.add(resolve('src/deicons'))
      .end()
      .use('svg-sprite-loader')
      .loader('svg-sprite-loader')
      .options({
        symbolId: '[name]',
      })
  },
  css: {
    loaderOptions: {
      sass: {
        prependData: `@import "~@/styles/variables.scss"`,
      },
      scss: {
        prependData: `@import "~@/styles/variables.scss";`,
      },
    },
    extract: {
      ignoreOrder: true,
    },
  },
}
